package pattern.singleton;

/**
 * 单例模式 懒汉模式（双重检测，加volatile禁止指令重排）
 * @author 86137
 */
public class Singleton1 {
    /**
     * 私有构造对象
     */
    private Singleton1(){

    }

    /**
     * 1。memory = allocate() 分配对象内存空间
     * 2。ctoInstance() 初始化对象
     * 3。instance = memory 设置instance指向刚分配的内存
     * 限制发生指令重排 单例对象 volatile 加上双重检测机制来禁止 指令重排
     */
    private volatile static Singleton1 instance = null;
    /**
     * 静态工厂方法  有性能开销
     */
    public static Singleton1 getInstance(){
        //双重检测机制  //B
        if(instance == null){
            synchronized(Singleton1.class) {
                if (instance == null){
                    instance = new Singleton1();
                }
            }
        }
        return instance;
    }
}
